import {
	pk,
} from '../config/config.js';
import jsrsasign from 'jsrsasign'

export default class CryptoUtil {

	// 用公钥将参数rsa加密
	static rSAEncrypt(data) {
		var rsa = new jsrsasign.RSAKey();
		rsa = jsrsasign.KEYUTIL.getKey(pk);
		var enc = jsrsasign.KJUR.crypto.Cipher.encrypt(data, rsa);
		//转换成Base64格式
		let base64Sign = jsrsasign.hextob64(enc);
		return base64Sign
	}

	// 加签名（SHA1withRSA）
	static digitalSign(reqJson, priK) {
		// 方式1: 先建立 key 对象, 构建 signature 实例, 传入 key 初始化 -> 签名
		var key = jsrsasign.KEYUTIL.getKey(priK);
		console.log(key);
		// 创建 Signature 对象
		let signature = new jsrsasign.KJUR.crypto.Signature({
			alg: "SHA1withRSA"
		});
		// 传入key实例, 初始化signature实例
		signature.init(key);
		// 传入待签明文
		signature.updateString(reqJson);
		// 签名, 得到16进制字符结果
		let a = signature.sign();
		let sign = jsrsasign.hextob64(a);
		console.log(sign);
		return sign;
	}

	// 验签(rsaData:加签名的数据 signByJava:Java生成签名)
	static verifySign(rsaData, signByJava) {
		// 验证Java的签名
		// 构建Signature实例
		// 这里 prvkeypem 放公钥pem看起来有点怪, 但是这是可行的, 内部还是使用的上文经常出现的 KEYUTIL.getKey(pk) 来生成公钥实例的
		var sign4Java = new jsrsasign.KJUR.crypto.Signature({
			alg: "SHA1withRSA",
			prvkeypem: pk
		});
		sign4Java.updateString(rsaData);
		var b2 = sign4Java.verify(jsrsasign.b64utohex(signByJava));
		console.log("jsrsasign verify 4 java: " + b2);
		return b2;
	}
}
